package br.com.aspas.beans;

import br.com.aspas.modelo.Evento;
import br.com.aspas.persistencia.EventoDao;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

public class EventoBean {

    private Evento evento;
    private List<Evento> listEvento;
    private String param;
    private Boolean verificaEvento;
    private Integer modeloCodigo;
    private String valorPesquisa;
    private EventoDao eventoDao;
    private List<SelectItem> listSelectItem;

    public EventoBean() {
        evento = new Evento();
        eventoDao = new EventoDao();
    }

    public String getValorPesquisa() {
        return valorPesquisa;
    }

    public void setValorPesquisa(String valorPesquisa) {
        this.valorPesquisa = valorPesquisa;
    }

    public void setEvento(Evento evento) {
        this.evento = evento;
    }

    public Evento getEvento() {
        return evento;
    }

    public void setListEvento(List<Evento> listEvento) {
        this.listEvento = listEvento;
    }

    public void setParam(String param) {
        this.param = param;
    }

    public String getParam() {
        param = "Evento";
        return param;
    }

    public Boolean getVerificaEvento() {
        return verificaEvento;
    }

    public void setVerificaEvento(Boolean verificaEvento) {
        this.verificaEvento = verificaEvento;
    }

    public Integer getModeloCodigo() {
        return modeloCodigo;
    }

    public void setModeloCodigo(Integer modeloCodigo) {
        this.modeloCodigo = modeloCodigo;
    }


    public List<Evento> getListEvento() {
        if (param == null) {
            listEvento = eventoDao.findAllEvento();
        } else {
            if (param.equals("Evento")) {
                listEvento = eventoDao.findAllEvento(valorPesquisa);
            }
            if (param.equals("Local")) {
                listEvento = eventoDao.findAllEventoLocal(valorPesquisa);
            }
            if (param.equals("Organizador")) {
                listEvento = eventoDao.findAllEventoOrganizador(valorPesquisa);
            }
            if (param.equals("Status")) {
                listEvento = eventoDao.findAllEventoStatus(valorPesquisa);
            }
        }
        return listEvento;
    }

    public String pesquisaEventoParam() {
        if (param == null) {
            listEvento = eventoDao.findAllEvento();
        } else {
            if (param.equals("Evento")) {
                listEvento = eventoDao.findAllEvento(valorPesquisa);
            }
            if (param.equals("Local")) {
                listEvento = eventoDao.findAllEventoLocal(valorPesquisa);
            }
            if (param.equals("Organizador")) {
                listEvento = eventoDao.findAllEventoOrganizador(valorPesquisa);
            }
            if (param.equals("Status")) {
                listEvento = eventoDao.findAllEventoStatus(valorPesquisa);
            }
        }
        return null;
    }

    public String visualizarEvento() {
        evento = eventoDao.findByPk(evento.getCodigo());
        return "editEvento";
    }

    public String editEvento() {        
        evento = eventoDao.findByPk(evento.getCodigo());
        return "editEvento";
    }

    public String gravar() {
        try {
            if (evento == null) {
                return "listEvento";
            } else {
                if (evento.getCodigo() == null) {
                    eventoDao.inserir(evento);
                } else {
                    eventoDao.altera(evento);
                }
                FacesContext.getCurrentInstance().addMessage("form",
                        new FacesMessage("Cadastro efetuado com Sucesso!"));
                FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("Evento");
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public String excluir() throws Exception {
        if (!eventoDao.remove(evento.getCodigo())) {
            FacesContext.getCurrentInstance().addMessage(null,
                    new FacesMessage("Evento não excluido. Verifique se existem participantes relacionados"));
        }
        return "listEvento";
    }

    public String sessionOut() {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("Evento");
        return "cadEvento";
    }

    public String sessionOutList() {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("Evento");
        return "consultaEvento";
    }

    public List<SelectItem> getListSelectItem() {
        listSelectItem = new ArrayList<SelectItem>();
        List<Evento> eventos = eventoDao.findAllEvento();
        for (Iterator<Evento> it = eventos.iterator(); it.hasNext();) {
            Evento tmp = it.next();
            SelectItem item = new SelectItem();
            item.setLabel(tmp.getNome());
            item.setValue(tmp.getCodigo());
            listSelectItem.add(item);
        }
        return listSelectItem;
    }

}

